#include "mainwindow.h"
#include "ui_mainwindow.h"

#include "Theme/themeanimation.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 初始化主题管理器
    ThemeManager::instance().initialize();
    // 设置主题
    ThemeManager::instance().setTheme(ThemeManager::ThemeQssEnum::Green);

    // 连接主题切换信号
    connect(&ThemeManager::instance(), &ThemeManager::themeChanged, this, [](const QString& themeName) {
        qDebug() << "themeName = " << themeName << endl;
    });
}

MainWindow::~MainWindow()
{
    qWarning() << " ~MainWindow() start" << endl;
    delete ui;
    qWarning() << " ~MainWindow() end" << endl;
}

void MainWindow::showEvent(QShowEvent *event)
{
    // 创建主题切换动画对象
    ThemeAnimation* animation = new ThemeAnimation(this);
    connect(animation, &ThemeAnimation::animationFinished, this, []() {
        // 动画完成后的处理
        qDebug() << "Animation finished";
    });
    // 执行主题切换动画，切换到暗色主题
    animation->fadeToTheme(ThemeManager::instance().currentTheme());
    // 开始淡入动画
    animation->fadeIn();

    event->accept();
}

void MainWindow::closeEvent(QCloseEvent *event)
{
    // 使用智能指针管理动画对象
    auto animation = std::make_unique<ThemeAnimation>(this);

    // 连接动画完成信号
    connect(animation.get(), &ThemeAnimation::animationFinished, this,
        [event]() {
            // 动画完成后的处理
            qDebug() << "~Animation finished";
            // 安全地关闭窗口
            event->accept();
            qApp->quit();
        });

    // 执行主题切换动画
    animation->fadeToTheme(ThemeManager::instance().currentTheme());
    // 开始淡出动画
    animation->fadeOut();

    // 阻止窗口立即关闭
    event->ignore();

    // 确保动画对象在动画完成前不会被析构
    // 可以使用QPointer或弱引用来跟踪动画对象
    animation.release();  // 释放所有权，让对象由Qt父子关系管理
}

// 选择主题
void MainWindow::on_action_Theme_triggered()
{
    ThemeSelector* selector = new ThemeSelector(this);
    selector->show();
    selector->activateWindow();
    connect(selector, &ThemeSelector::themeSelected, this, [](const QString& themeName) {
        ThemeManager::instance().setTheme(themeName);
    });
}

// 切换到暗色主题动画
void MainWindow::on_pushButton_clicked()
{
    // 创建测试窗口
    QWidget* testWindow = new QWidget();
    testWindow->resize(300, 300);      // 设置窗口大小为300x300像素
    testWindow->show();                // 必须显示窗口才能看到动画效果
    testWindow->setWindowOpacity(1.0); // 设置初始透明度

    // 输出当前窗口透明度，用于调试
    qDebug() << "Test window opacity:" << testWindow->windowOpacity();

    // 创建主题切换动画对象
    ThemeAnimation* animation = new ThemeAnimation(testWindow);
    connect(animation, &ThemeAnimation::animationFinished, this, [testWindow]() {
        // 动画完成后的处理
        qDebug() << "Animation finished";
        testWindow->close();
    });
    // 执行主题切换动画，切换到暗色主题
    // 可以修改参数切换到其他主题，如"light"、"blue"等
    animation->fadeToTheme(ThemeManager::ThemeQssEnum::Dark);
    animation->fadeOut();
}
